<?php

/**
 * 查询全部数据
 * @param String $sql Sql语句
 * @return Array 返回结果数组
 */
function findAll($sql)
{
  global $conn;
  $res = mysqli_query($conn, $sql);
  if (!$res) {
    echo "查询数据失败" . $sql;
  }
  while ($data = mysqli_fetch_assoc($res)) {
    $list[] = $data;
  }
  return $list;
}

/**
 * 查询单条数据
 * @param String $sql Sql语句
 * @return Array 返回结果数组
 */
function findOne($sql)
{
  global $conn;
  $res = mysqli_query($conn, $sql);
  if (!$res) {
    echo "查询数据失败" . $sql;
    echo "<br>";
    echo mysqli_error($conn);
    // exit;
  }
  return mysqli_fetch_assoc($res);
}

/**
 * 插入一条数据
 */
function insert($table, $data)
{
  global $conn;
  global $pre_;
  // 将数组里面的索引全部提取出来 形成新的数组
  $keys = array_keys($data);

  //数组变成字符串
  $fields = "`" . implode("`,`", $keys) . "`";
  $values = "'" . implode("','", $data) . "'";
  $sql = "INSERT INTO $pre_$table($fields)VALUES($values)";
  //执行语句
  $res = mysqli_query($conn, $sql);

  if (!$res) {
    echo "SQL语句执行失败：" . mysqli_error($conn);
    exit;
  } else {
    // ShowMsg("插入成功");
  }
  // 返回插入数据的id值
  return mysqli_insert_id($conn);
}
/**
 * 编辑数据
 */
function update($table, $data, $where)
{
  global $conn;
  global $pre_;
  $str = '';
  foreach ($data as $key => $item) {
    $str .= "`$key` = '$item',";
  }
  $str = trim($str, ",");

  //组装sql语句
  $sql = "UPDATE $pre_$table SET $str WHERE $where";
  //执行语句
  $res = mysqli_query($conn, $sql);
  // 返回受影响行数
  return mysqli_affected_rows($conn);
}

/**
 * ajax操作 删除 成功 返回的信息
 */
function success($msg = '未知信息', $data = null, $code = 1)
{
  $result = [
    'msg' => $msg,
    'data' => $data,
    'code' => $code
  ];
  echo json_encode($result);
  exit;
}
/**
 * ajax操作 删除 失败 返回的信息
 */
function error($msg = '未知信息', $data = null, $code = 0)
{
  $result = [
    'msg' => $msg,
    'data' => $data,
    'code' => $code
  ];
  echo json_encode($result);
  exit;
}

/**
 * 删除操作
 */
function delete($table, $where)
{
  global $conn;
  $sql = "delete from $table where $where";
  $res = mysqli_query($conn, $sql);
  if ($res) {
    return mysqli_affected_rows($conn);
  } else {
    echo "错误信息：" . mysqli_errno($conn);
    exit;
  }
}

/* 
*   获取当前的网址   
*/
function get_url()
{
  // 获取当前的完整地址
  $str = $_SERVER['PHP_SELF'] . '?';

  if ($_GET) {
    foreach ($_GET as $k => $v) {
      if ($k != 'page') {
        $str .= $k . '=' . $v . '&';
      }
    }
  }
  // echo $str;

  return $str;
}

/**
 * 分页函数
 * @param Int $current 当前页
 * @param Int $count 记录总数
 * @param Int $limit 每页显示的条数
 * @param Int $size 页码数
 * @param Int $class 样式
 * 
 */
function page($current, $count, $limit, $size, $class = 'digg')
{
  $str = '';
  
  // 如果数据总数大于每页条数，则显示分页
  if ($count > $limit) {
    // 算出总页数
    $pages = ceil($count / $limit);
    // 获取当前页面的url
    $url = get_url();

    // 分页 开始拼接
    $str .= '<div class="' . $class . '" >';

    // 开始页
    if ($current == 1) {
      $str .= '<span class="disabled"> 首&nbsp;&nbsp;页 </pan>';
      $str .= '<span class="disabled"> 上一页 </pan>';
    } else {
      $str .= '<a href="'.$url.'page=1">首&nbsp;&nbsp;页</a>';
      $str .= '<a href="'.$url.'page='.($current - 1).'">上一页</a>';
    }

    // 中间页
    if ($current <= floor($size / 2)) {
      $start = 1;
      $end = $pages < $size ? $pages : $size;
    } elseif ($current >= $pages - floor($size / 2)) {
      $start = $pages - $size + 1 <= 0 ? 1 : $pages - $size + 1;
      $end = $pages;
    } else {
      $start = $current - floor($size / 2);
      $end = $current + floor($size / 2);
    }

    for ($i = $start; $i <= $end; $i++) {
      if ($current == $i) {
        $str.='<span class="current">'. $i .'</span>';
      } else {
        $str.='<a href="'.$url.'page='.$i.'">'.$i.'</a>';
      }
    }

     // 结束
     if($current == $pages)
     {
         $str .= '<span class="disabled">下一页</span>';
         $str .= '<span class="disabled">尾&nbsp;&nbsp;页</span>';
     }else{
         $str .= '<a href="'.$url.'page='.($current + 1).'">下一页</a>';
         $str .= '<a href="'.$url.'page='. $pages .'">尾&nbsp;&nbsp;页</a>';
     }
    $str .= '</div>';
  } 
  return $str;
}

/**
 * 上传图片
 * @param String $name 上传图片的字段名
 * @param Array $type 图片格式
 * @param Int $size 图片大小
 * @param String $path 存放上传后图片的路径
 */

function upload($name, $type = ['jpg', 'png', 'jpeg', 'gif'], $size = 1048576, $path = 'upload')
{
  // 判断文件夹是否存在
  if (!is_dir($path)) {
    @mkdir($path);
  }
  // 返回的结果
  $result = [
    'code' => 0,   // 状态码，0表失败，1表成功
    'msg' => '未知信息',
    'data' => null
  ];
  // 获取错误码
  $ErrorCode = $_FILES[$name]['error'];

  // $_FILES['userfile']['error']  提供了在文件上传过程中出现的错误：
  switch ($ErrorCode) {
    case 1:
      $result['msg'] = '上传的文件超出了指定大小';
      return $result;
      break;
    case 2:
      $result['msg'] = '上传的文件超出了最大值';
      return $result;
      break;
    case 3:
      $restut['msg'] = '网络错误，上传失败';
      return $result;
      break;
    case 4:
      $result['msg'] = '请指定上传的文件';
      return $result;
      break;
  }

  // 获取文件的后缀名
  $pre = pathinfo($_FILES[$name]['name'], PATHINFO_EXTENSION);
  if (!in_array($pre, $type)) {
    $restut['msg'] = '上传文件格式不正确，请重新再试';
    return $result;
  }

  // 获取文件大小
  $fileSize = $_FILES[$name]['size'];

  if ($fileSize > $size) {
    $restut['msg'] = '文件过大，请重试';
    return $restut;
  }

  // 设置上传图片的名称 如：2022051012341234.jpg
  $fileName = date('ymdHis', time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $pre;

  // is_uploaded_file()函数检查指定的文件是否是通过 HTTP POST 上传的
  if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
    // move_uploaded_file($_FILES[$name]['tmp_name'], $path . '/' . $fileName);
    move_uploaded_file($_FILES[$name]['tmp_name'], $path . '/' . $fileName);
    $result = [
      'code' => 1,
      'msg' => '图片上传成功',
      'data' => $path . '/' . $fileName
    ];
    return $result;
  } else {
    $result['msg'] = '上传图片失败';
    return $result;
  }
}


/**
 * 获得随机字符串
 * @param   Number  $len    需要的长度
 * @param   Bool    $special    是否需要特殊符号
 * @return  String  返回随机字符串
 */
function build_ranstr($len = 8, $special = false)
{
  $chars = array(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
    "3", "4", "5", "6", "7", "8", "9"
  );

  if ($special) {
    $chars = array_merge($chars, array(
      "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
      "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
      "}", "<", ">", "~", "+", "=", ",", "."
    ));
  }

  $charsLen = count($chars) - 1;
  shuffle($chars);                            //打乱数组顺序
  $str = '';
  for ($i = 0; $i < $len; $i++) {
    $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
  }
  return $str;
}

/**
 * @param String $msg 提示信息
 * @param String $url 跳转地址
 * @return String $str 结果
 */
function ShowMsg(String $msg, $url = null)
{
  // 定义一个空字符串
  $str = '';
  if ($url) {
    $str = "
      <script>
          alert('$msg');
          location.href = '$url';
      </script>
    ";
  } else {
    $str = "
      <script>
          alert('$msg');
          history.go(-1);
      </script>
    ";
  }

  // 调用函数直接输出
  echo $str;
}

/**
 * 预格式化的函数
 */
function pre($data)
{
  echo '<pre>';
  // print_r 输出数组 => echo var_dump
  print_r($data);
  echo '</pre>';
}
